package com.wwu.system.common.security;

import com.wwu.system.entity.SysUser;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

/**
 *  用户工具类
 * @author 一蓑烟雨
 * @date 2021-12-05 20:52
 * @version 1.0.0
 **/
@Component
public class SecurityUtil {

    /**
     *  获取当前用户信息
     * @return com.wwu.system.entity.SysUser
     * @author 一蓑烟雨
     * @date 2021/12/5 0005 下午 20:54
     */
    public static SysUser getCurrUser(){
        return (SysUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    }

    /**
     *  获取当前用户Id
     * @return java.lang.Integer
     * @author 一蓑烟雨
     * @date 2021/12/5 0005 下午 21:00
     */
    public static String getCurrUserId(){
        SysUser sysUser = getCurrUser();
        return sysUser.getUserId();
    }

    /**
     *  获取当前用户名称
     * @return java.lang.String
     * @author 一蓑烟雨
     * @date 2021/12/5 0005 下午 21:01
     */
    public static String getCurrNickName(){
        SysUser sysUser = getCurrUser();
        return sysUser.getNickName();
    }

    /**
     *  获取当前用户登陆名
     * @return java.lang.String
     * @author 一蓑烟雨
     * @date 2021/12/5 0005 下午 21:01
     */
    public static String getCurrUserName(){
        SysUser sysUser = getCurrUser();
        return sysUser.getUsername();
    }

    /**
     * 验证明文密码加密后与密文密码是否一致
     * @param clearPassword 明文密码
     * @param cipherPassword    密文密码
     * @return java.lang.Boolean
     * @author 一蓑烟雨
     * @date 2023/5/31 10:03
     */
    public static Boolean validatePassword(String clearPassword,String cipherPassword){
        return new BCryptPasswordEncoder().matches(clearPassword,cipherPassword);
    }

    /**
     * 对明文进行加密
     * @param clearPassword 明文密码
     * @return java.lang.String
     * @author 一蓑烟雨
     * @date 2023/6/2 22:34
     */
    public static String encodePassword(String clearPassword){
        PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.encode(clearPassword);
    }
}